home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_491 / dice / version.doc < prev    next >
Text File  |  1992-05-06  |  17KB  |  453 lines

  1.  
  2.     (note, this is the full version.doc file, not everything applies to
  3.     the freeware version of DICE)
  4.  
  5.  
  6.                    VERSION.DOC
  7.                   DICE
  8.  
  9. VERS DES COMMENT
  10.     VERS    = Release Version
  11.     DES     = bug fixed / feature designator
  12.     XB  - major bug fixed in main compiler
  13.           (use of routine in question could have caused a crash)
  14.     B   - minor bug fixed in main compiler
  15.     F   - feature added
  16.     E   - enhancement to existing feature
  17.     O   - optimization added
  18.  
  19.     ADD - feature added or fixed that is standard C but was not previously
  20.           implemented or working.
  21.  
  22.     XBL - major bug fixed to library
  23.     BL  - minor bug fixed to library
  24.     FL  - feature added to library
  25.     OL  - optimization added to library
  26.  
  27.     XBA - major bug fixed in support program (i.e. not DCC or sub programs)
  28.     BA  - minor bug fixed in support program
  29.     FA  - feature added to support program (or new support program)
  30.     OA  - optimization added to support program
  31.  
  32.     COMMENT = comment or bug, feature
  33.  
  34. 2.06.21
  35.     E    fixed register reallocation, should now do a better job
  36.     allocating registers in complex subroutines.  Hopefully squashed
  37.     'maximum retries exceeded' error for all but the most incredibly
  38.     complex expressions.
  39.  
  40.     B    fixed bug in int->float conversion, expressions such as:
  41.         double x = (double)(a * b);
  42.  
  43.     E    fixed somestuff that generated an infinite WARN loop.
  44.  
  45.     F    DCC now creates the destination directory heirarchy if it does
  46.     not exist.  For example, when you DCC com/x.c the object file
  47.     will be T:com/x.o, with T:com created if necessary.
  48.  
  49.     F    DYNAMIC FUNCTION/VAR LIBARARY SUPPORT ADDED, see __dynamic
  50.     explanation in DYNAMIC.DOC .
  51.  
  52.     F    DCPP now accepts -Ddefine(vars..)=definition, it used to be
  53.     able to only accept -Ddefine=value
  54.  
  55. 2.06.20
  56.     F    TimerBase, for timer.device library calls, now has auto-open
  57.     capability, meaning that you can simply call AddTime(), CmpTime(),
  58.     SubTime(), and the new 2.0 calls (GetSysTime() & ReadEClock())
  59.     without having to open the timer.device and set up TimerBase
  60.     yourself.
  61.  
  62.     B    bug in if (ptr & 1) and similar constructs doing a logical and
  63.     in a compare against a pointer rather than an int produced
  64.     bad code caught by DAS.
  65.  
  66.     B    x.o was in c.lib, this is wrong... x.o must be the LAST file in
  67.     any link and is included automatically by DCC when it runs DLINK.
  68.  
  69.     F    additional example code in DCC2:examples -- a DOS handler and
  70.     a shared library.
  71.  
  72. 2.06.19
  73.     B    bug in dynamic stack code under 1.3 fixed
  74.     B    bug in workbench startup under 1.3 fixed
  75.     B    bug in register allocation fixed (would cause fatal error
  76.     message 'too many retries' sometimes when procedure args
  77.     declared as arrays instead of pointers)
  78.  
  79. 2.06.18
  80.     F    several more libraries have auto-open capability
  81.  
  82.     B    bug in DLINK fixed -- would GURU on large links due to an error
  83.     in the allocation routines (relocation info larger than 4K would
  84.     cause a GURU)
  85.  
  86. 2.06.17
  87.     F    DCPP now scans DINCLUDE:PD/ for include files.    This is where I
  88.     will be putting .H files for various ports (such as the UNIX
  89.     regexp port).  This was done so as not to clutter the main
  90.     DINCLUDE: and to differentiate between PD files and non-PD
  91.     files.
  92.  
  93.     UNIX compatible .H files are usually placed in DINCLUDE: or
  94.     DINCLUDE:SYS/
  95.  
  96.     F    preprocessor now handles #if defined(symbol) properly (was
  97.     previously not implemented)
  98.  
  99.     F    BITFIELDS now 99% implemented!    including signed/unsigned
  100.     qualifications.  The only thing that does not work is ++bitfield
  101.     and --bitfield.  Single-bit bitfields have been optimized.
  102.     aggregate initialization of bitfields is still wanting.  executable
  103.     actually got smaller when I finally got down and fixed these up.
  104.     No 020/030 support yet.
  105.  
  106.     F    startup code modified to allow writes to desc 0, reads from desc 1,
  107.     etc...    at the file descriptor level but not the stdio level.  This
  108.     is to support some UNIX programs which do this.
  109.  
  110.     BL    bug in [f]putc() fixed -- [f]putc() is supposed to return the put character,
  111.             but did not do so in the case of a new line (putc), or
  112.             at all (fputc).
  113.  
  114.     F    NEW LIBRARY ROUTINESE:    stat(), fstat(), getenv(), opendir(),
  115.     readdir(), closedir(), rewinddir() (see MAN/UNIX.DOC)
  116.  
  117.     F    chdir() now restores the original directory on exit
  118.  
  119.     F    Dynamic Stacking added (-gs option).  Somewhat primitive, but will
  120.     get much better.  This allows subroutines to be as deeply nested as
  121.     required, allocating and deallocating stack frames when low stack
  122.     conditions exist.
  123.  
  124.     F    longjmp()/setjmp() now properly handle dynamic stacks
  125.  
  126.     B    fixed another bug, this one having to do with the index address
  127.     mode (An,Dn.x) combined with a binary operator.
  128.  
  129.     B    fixed bug in FDTOLIB that screwed up register ordering.
  130.  
  131. 2.06.16
  132.     B    fixed EXG bug in DAS, EXG As,Ad would generate Ds,Dd.. screwed
  133.     up registered args (-mRR).
  134.  
  135.     B    fixed bug in *= and /= combined w/ array indexing, things like
  136.     temp[i] /= 23; would use the scratch regs for storage across
  137.     the divide call.
  138.  
  139. 2.06.15
  140.     F    BASIC REGISTERED ARGUMENTS ADDED.  See -mr, -mR, and -mRR options
  141.  
  142.     F    prototype optimization.  If a prototype says a procedure takes a
  143.     short, then DICE pushes a long (as usual).  However, DICE will
  144.     no longer EXT the object before pushing it (upper word is garbage).
  145.     This works because the procedure, having declared the argument a
  146.     short, will only access the lower 16 bits.
  147.  
  148.     B    fixed token pasting bug in dcpp, a ## b ## c now works properly.
  149.  
  150.     F    first registered distribution that includes the 2.0 includes,
  151.     restructuring of 1.3 includes (now called 'amiga13' instead of
  152.     'amiga'), and restructuring of disks to make more space.
  153.  
  154. 2.05.14
  155.     BL    fgets() would overflow the buffer by one character when input lines
  156.     were larger than the buffer size.
  157.  
  158.     B    DCC would complain about output (-o) files ending in .h or .c when
  159.     they do not actually end in .h or .c ..
  160.  
  161. 2.05.13
  162.     B    DCC was supplying only a 2K stack to NON-RESIDENTED sub programs.
  163.     Oops.
  164.  
  165.     F    New floating point support for MATHIEEESING*.LIBRARY ... single
  166.     precision IEEE library.  This is now the default since it is
  167.     more compatible with the double precision IEEE library for
  168.     conversions between single & double precision.
  169.  
  170.     Use the -ffp option to DCC to use the old motorola fast floating
  171.     point single precision library.  Note that the new ieee single
  172.     precision library may not exist on every computer.
  173.  
  174. 2.05.12
  175.     B    another bug with 'const static' items not properly aligning the
  176.     routine they were declared in (when declared within a procedure
  177.     definition).  Fixed.
  178.  
  179.     B    pfmt has a local 64 byte buffer which used to be static.  This is
  180.     illegal for the ROM.LIB version of sprintf() & vsprintf() and so I
  181.     have made this an auto instead.  This fix does not effect Amiga C
  182.     programming though it does mean that [v]sprintf() may now be called
  183.     out of context or multi-threaded without mishap.
  184.  
  185.     F    qsort(), rand(), and srand() have been written.
  186.  
  187.     B    volatile was not being handled proper, 'volatile char *ptr' is
  188.     a pointer to a volatile char, NOT a volatile pointer, for
  189.     example.
  190.  
  191. 2.05.11
  192.     F    new library, ROM.LIB, contains only those routines from C.LIB that
  193.     are completely self contained (reference no static or global data,
  194.     or other routines.  Use only autos if at all).
  195.  
  196.     This library is included instead of C.LIB when the -rom option
  197.     to DCC is used (with the -rom option, amigas*.lib is not included
  198.     either, and it is up to the programmer to specify his own startup
  199.     module)
  200.  
  201.     F    char ary[0] and empty structs return errors, but a direct 'void'
  202.     declaration is allowed.  i.e. 'void x;', useful in some cases.
  203.  
  204.     F    Specifying the 'register' keyword now adds some 'weight' to the
  205.     variable, perhaps giving it more of a chance of becomming a
  206.     register.
  207.  
  208.     B    DCPP was improperly handling token pasting (##), this has been
  209.     fixed.
  210.  
  211.     B    static const objects declared within a procedure not word-aligned
  212.     could cause the procedure code to not be word-aligned, thus
  213.     causing a software error.
  214.  
  215.     F    CONST object handling has been changed.  Before 2.05.11 const
  216.     objects were not put into a CODE hunk unless the -ms or -mS options
  217.     are given to DCC.  2.05.11 and beyond put const qualified objects
  218.     in a code hunk regardless.
  219.  
  220.     F    C.O Modified.  Any program run in the background with RUN will not
  221.     attempt to Open("*",..) to get the stderr channel but instead
  222.     will use the stdout descriptor if it exists.  This allows programs
  223.     to be detached from a CLI (i.e. that you can run a program and
  224.     then close the CLI window without mishap)
  225.  
  226.     F    -020, -030, -881, -882 options formally added (currently -020/-030
  227.     are the same and -881/-882 are the same)
  228.  
  229.     -020: uses EXTB.L   (no major support has been added yet)
  230.  
  231.     B    DSEARCH had a bug... when multiple files are scanned it would miss
  232.     lines in the second file and beyond!
  233.  
  234.     F    oops, const items in the library were not placed in the code
  235.     section.  This effects <ctype.h> ... you must recompile any
  236.     source files that use <ctype.h> macros since the access method
  237.     is now pc-relative instead of data-relative.
  238.  
  239.     The fix is more pertainent to ROMd applications that use <ctype.h>
  240.     ... the lookup tables are no longer copied into RAM for such
  241.     applications.
  242.  
  243. 2.05.10
  244.     F    __config and __shared type qualifiers added
  245.  
  246.     B    --var; generated an internal error
  247.  
  248. 2.05.09
  249.     B    switch() did not generate proper code when default: label was not
  250.     placed last and fell through to another case, or a case before
  251.     the default fell through to it when default: was not placed last.
  252.  
  253.     B    comma operator bug fixed (would cause fatal internal error in
  254.     some cases)
  255.  
  256.     B    a[i] = a[j] = a[k] ... = x; ran out of registers if too many
  257.     assignments.  This has been fixed.
  258.  
  259. 2.05.08
  260.     B    fixed random-memory-read bug in DLink (did not effect linking, but
  261.     would sometimes read the custom-chip area causing screen glitches
  262.     and other mishaps). (dlink .02)
  263.  
  264.     BL    access() fixed, returns true if checking for existance on an
  265.     object which is currently locked exclusively by somebody else.
  266.  
  267.     B    DICE would give a prototype argument mismatch warning when the
  268.     proto says array-of and the declaration says pointer-to, when
  269.     for function args these mean the same thing.  This has been fixed.
  270.  
  271.     B    DICE now checks for duplicate case statements
  272.  
  273.     B    error in indexed structure copies, struct foo AR[16][16];
  274.     foo[i][j] = foo[k][l]; fixed (would give fatal error message before).
  275.  
  276.     XB    MAJOR fix to type qualifiers.. __far, __near, __chip, __aligned,
  277.     etc... all work properly now when specified in complex objects
  278.     (e.g. arrays)
  279.  
  280.     B    global initialization that assigns the address of an array was
  281.     broken (would give fatal error message).  Now fixed.
  282.  
  283.     XB    bug fixed when casts of pointer constants occured,
  284.     short = *(long *)0x0  improperly read the word at location 0, it
  285.     should have read the word at location 2!.
  286.  
  287.     F    -ms, -mS, -ms0 options added (placement of const data), see DCC.DOC.
  288.     THIS IS A GREAT OPTION (-ms) WHEN USED ALONG WITH -r !
  289.  
  290.     -SD -SB added to DC1 (proly not useful to anybody)
  291.  
  292.     __far declared data is now placed in a different section, allowing
  293.     the small-data model to be used when more than 64K of data
  294.     exists without fancy rearrangement of junk.
  295.  
  296.     F    DICE is now able to generate ROMable code via new options and
  297.     utilities, with full support for r/w initialized data items and use
  298.     of the absolute.W addressing mode instead of the small-data model.
  299.  
  300.     B    array of const now properly becomes a const array of const.
  301.  
  302.     B    volatile auto storage no longer put in registers (refer to setjmp
  303.     manual page)
  304.  
  305.     O    DICE executables take somewhat less run-time memory due to
  306.     being compiled with the -ms option, especially when multiple
  307.     instances are running simultaniously.
  308.  
  309.     O    new options added to DOBJ (-nc and -nd to show symbols only)
  310.  
  311.     F    better code for large switches (binary subdivision method, aprox
  312.     4x speed increase for large switches)
  313.  
  314.     B    switch() did not generate proper code when the overall switch
  315.     range is larger than 0x7FFFFFFF (i.e. highest - lowest)
  316.  
  317.  
  318. 2.05.07
  319.     F    -proto option added ... generates an error for any function call
  320.      that does not have a prototype
  321.  
  322.     B    struct foo *y = &x[0]; where sizeof(struct foo) not a power of 2 (x
  323.     is an array of foo) in global or static declaration would cause
  324.     fatal error.  Fixed.
  325.  
  326.     B    Various fixes to the preprocessor
  327.  
  328. 2.05.06
  329.     ADD DAS now supports all 68000 opcodes
  330.     B    trigraph sequences now supported (??x)
  331.     B    minor bug in assembler that generated an infinite length object file
  332.     (due to a specific error condition) fixed, now exits gracefully.
  333.     F    DOBJ now part of registered distribution (object code disassembler)
  334.     B    forgot to include DME.DOC !
  335.  
  336.     B    STDDEF.H changed, the offsetof() macro no longer prefixes the type
  337.     with the 'struct' keyword.
  338.  
  339.     B    complex procedural types now work. e.g.
  340.             extern void (*signal(int, void (*)(int)))(int);
  341.  
  342.     ADD cpp #line directive (supports yacc generated source files)
  343.  
  344. 2.05 RELEASE (REG UPDATE #2)
  345.     (DC1 2.05.05)
  346.     B    small bug (caught by assembler).  int a[4];     (a-2)[c] = 0;
  347.     would cause bad assembly to be output.
  348.  
  349.     B    now reports error for exp.field where exp is not a structure.
  350.  
  351.     (CPP 2.05.04)
  352.     B    cpp not counting lines right (generates error reports
  353.     specifying the wrong line number)
  354.  
  355. 2.05 RELEASE DC1 2.05.04 (REG UPDATE #1)
  356.     XB        array indexing not of a power of 2 (i.e. req's multiply)
  357.         destroyed temporaries in scratch registered.
  358.  
  359. 2.05 RELEASE (REG RELEASE)
  360.     ADD     prototypeing works properly now.
  361.  
  362.     BL        gets would not return last line of file if last line did not
  363.         terminate with a newline.
  364.  
  365.     BL        fgets would not return last line of file if last line did not
  366.         terminate with a newline.  Also, fgets did not return a pointer
  367.         to the base of the passed buffer for valid lines
  368.  
  369.     B        compiler used to allow unbalanced parenthesis... this has been
  370.         fixed.  i.e. return(10;  reports an error as it should.
  371.  
  372.     B        bugs in the preprocessor fixed having to do with macro recursion
  373.  
  374. 2.04
  375.     XBL     strftime() did not \0 terminate the buffer in all cases
  376.  
  377.     BA        libtos() would not modify PotgoBase into the small-data model
  378.  
  379.     B        DC1 would generate lea An,An which is an illegal instruction.
  380.         This is caught and reported by DAS.
  381.  
  382.     B        DC1 would generate a move.0 (caught by assembler) when passing
  383.         an argument to a prototyped function using the array declaration
  384.         form instead of a pointer form, i.e. foo(char buf[], int y, ...);
  385.  
  386.     O        MULS/MULU optimizations added (long = short * short)
  387.  
  388.     O        ptr - ptr operation: ASR now used when possible instead of a
  389.         long divide.
  390.  
  391.     F        linker now supports qualified hunks (e.g. CHIP ram hunks, etc...)
  392.  
  393.     ADD     partially implemented # (string-ize) and ## (token pasting)
  394.         operators in preprocessor.    Fixed a macro bug in preprocessor
  395.         (that used to generate an error message).
  396.  
  397.     BL        [s/f]scanf() improperly included %*<spec> objects in the
  398.         returned count.  This has been fixed.
  399.  
  400.     O        More small optimizations added that now result in at least a
  401.         2-3% improvement in code size.  Amoung other things,
  402.         moveq+swap used to load large integer values when possible and
  403.         clr.l -(sp) is used instead of pea 0.W .
  404.  
  405.     XB        WORKBENCH SUPPORT FIXED.  Previously the exit code would return
  406.         the workbench message and then proceed to make additional calls
  407.         that could break the Forbid(), thus causing the workbench to
  408.         unload the segment before the code has completed execution.
  409.  
  410.         _WBMsg, if non-NULL, is now returned just after a Forbid() and
  411.         just before the final register restore/rts of the program.
  412.  
  413.     ------  REGISTERED RELEASE ($40 shareware fee) ------
  414.  
  415.     ADD     Floating point for float's and double's has been implemented
  416.         but some deficiencies (such as not all library routines have
  417.         been implemented) still exist.  Compile time constant fp
  418.         operations are done in 128-bit mantissa format using a base 10
  419.         exponent (i.e. no base conversion error factors).
  420.  
  421.     F        __near, __far, and __chip keywords have been implemented.  Note
  422.         however that programs containing __far and __chip keywords may
  423.         not be made resident.
  424.  
  425.     ADD     bitfields have been added and should now work in most cases.
  426.         Comparisons of bitfields only work in the == 0 and != 0
  427.         cases (this includes if (bitfield) and if (!bitfield)
  428.         constructions).
  429.  
  430.         Bitfields are word aligned and packed into words (16 bits),
  431.         though a bit field itself may be up to 32 bits in size.  Some
  432.         optimizations have been implemented.
  433.  
  434.  
  435. 2.03    Internal Intermediate Version
  436.  
  437. 2.02
  438.     BL        open() was broken in 2.01, causing fopen(..., "w") to not
  439.         truncate the file.    Dumb Dumb Dumb.
  440.  
  441. 2.01
  442.     BL        fflush() and fopen() were broken... file position was not
  443.  
  444.     XBL     Fixed var-args bug ... va_arg was not indirecting the
  445.         quantity but returned a pointer instead.  pfmt and sfmt
  446.         had to be changed.
  447.  
  448. 2.00
  449.  
  450.     --        Initial shareware release
  451.  
  452.  
  453.